package com.jingbian.cppccbackend.service.admin;

import com.jingbian.cppccbackend.entity.Proposals;
import com.baomidou.mybatisplus.extension.service.IService;
import com.jingbian.cppccbackend.entity.vo.PageVO;
import org.springframework.core.io.ByteArrayResource;
import org.springframework.web.bind.annotation.RequestParam;

import java.io.IOException;
import java.util.List;
import java.util.Map;

/**
 * <p>
 * 提案信息表 服务类
 * </p>
 *
 * @author yezi
 * @since 2025-02-11
 */
public interface ProposalsService extends IService<Proposals> {


    /**
     * 查询某个提案的详情
     * @param proposalId 提案ID
     * @return Proposals
     */
    Proposals getProposalById(Integer proposalId);

    /**
     * 【管理员】获取所有提案数据及其关联的附件和联名人信息
     * @return List<Proposals>
     */
    PageVO<Proposals> getAllProposalsWithDetails(Integer pageNum, Integer pageSize, String status, String proposalType, String startDate, String endDate, String sort, String department, String  searchText ,Integer pageStatus);


   /**
     * 【管理员】获修改提案状态
     * @param proposalId 提案ID
     * @param status 新状态
     * @param isOr 是否通过
     * @param pageStatus 页面状态
     * @param department 分流部门（仅分流时需要）
     * @param handing_result 专项处理结果
     * @param filePaths 专项处理附件路径列表
     */
    void updateProposalStatus(Integer proposalId, String status, Boolean isOr, Integer pageStatus, String department, String handing_result, List<String> filePaths,String fileName,String size);

    //退回
    void senBack(Integer proposalId, String status, Boolean isOr, Integer pageStatus, String department);

    /**
     * 【管理员】获根据搜索文本搜索提案
     * @param searchText 搜索文本
     * @return List<Proposals>
     */
    List<Proposals> searchProposals(String searchText);

    // 获取提案统计数据
    Map<String, Object> getProposalStatistics();

    // 获取提案类型分布数据
    List<Map<String, Object>> getProposalTypeDistribution();

    // 获取提案提交趋势数据
    List<Map<String, Object>> getProposalTrend(String startDate, String endDate);

    //公示
    void publicity(Integer proposalId, String status, Boolean isOr);

    /**
     * 获取提案导出列表数据
     * @param status 状态筛选
     * @param proposalType 提案类型
     * @param startDate 开始日期
     * @param endDate 结束日期
     * @param sort 排序方式
     * @param department 部门筛选
     * @param searchText 搜索文本
     * @param pageStatus 页面状态
     * @return 提案列表数据
     */
    List<Proposals> getProposalsExportList(String status, String proposalType, String startDate, 
                                          String endDate, String sort, String department, 
                                          String searchText, Integer pageStatus);
                                          
    /**
     * 生成提案Word文档
     * @param data 提案数据
     * @return Word文档的字节资源
     */
    ByteArrayResource generateProposalDoc(Map<String, String> data);
}